<?php

/**
 * @example:
 $GENXML = new GeneralXml();
 $xml      = $GENXML->GetNotArchiveEmptyXml();

 $answer = $xml->addChild("action_list");
 $answer->addAttribute("ok","yes");
 $answer->addAttribute("teste",'teste');

 $GENXML->SendToBrowserDownload($answer);
 exit;
 */
class GeneralXml
{

    public function GetNotArchiveEmptyXml($xmlstr)
    {

        $xml = new SimpleXMLElement($xmlstr);

        return $xml;
    }

    public function SendToBrowserDownload($xml,$nome_arquivo)
    {
        ob_clean();

        header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT");
        header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
        header ( "Pragma: no-cache" );
        header ( "Content-type: application/octet-stream; name=".$nome_arquivo.".xml");
        header ( "Content-Disposition: attachment; filename=".$nome_arquivo.".xml");
        header ( "Content-Description: PHP Generated Data" );
        header('Content-Type: text/xml');

        echo $xml->asXML();
    }

    public function SendToBrowser($xml)
    {
        ob_clean();
        header('Content-Type: text/xml');
        header("Cache-Control: no-cache, must-revalidate");
        echo $xml->asXML();
    }

    /**
     * Método Responsavel por gerar um arquivo xml
     * @access public
     * @param array $arrayXml Dados contendo o nome das tags e seus valores
     * @param string $nomeArquivo deve conter o nome do arquivo xml
     * @param string $tag deve conter o nome da tag master que abrange o conjunto de dados
     * @param boolen $download treu para baixar o arquivo, false para exibir o codigo
     */
    public function geraXml($arrayXml,$nomeArquivo,$tag,$download=true)
    {
        if (is_array($arrayXml))
        {
            $var = "<?xml version='1.0' encoding='UTF-8'?>\n<$nomeArquivo></$nomeArquivo>";
            $xml = $this->GetNotArchiveEmptyXml($var);

            foreach ($arrayXml as $chave => $value)
            {
                $aux = $xml->addChild($tag);
                foreach ($value as $key => $valor)
                {
                    $aux->addChild($key, $valor);
                }
            }
        }
        else
        {
            return false;
        }

        if($download)
        {
            $this->SendToBrowserDownload($xml,$nomeArquivo);
        }else{
            $this->SendToBrowser($xml);
        }
    }
}

?>